Cloudflare pagesでdurable objectsを使いたい場合
現状、pagesではDOを触らんほうが良い。
素直にworker + site構成がいい。Honoとか使うと簡単ですよ ↓で調べたとおり、service bindingで別workerとつないでDOにfetchを投げることはできたのだが、fetchの第2引数渡してるとエラーだとか、ちゃんと動かない
公式のchatのデモも動かせない
一方、pagesを使わずworker + site構成は、何も問題ない
localもdevも触った範囲では問題なくDOが動く
しかし、いずれは不具合も対応はされるでしょうね
ーーーー
できないので、以下のようなことをしてもだめ
wrangler pages devで--doでbinding指定
wrangler.tomlにdurable_objects書く
ローカルで動かないだけなのか、デプロイしたら動くのかは不明。
試してない
デプロイして動いてもローカルで動かせないんじゃ開発がだるいので
is there any plan to make pages functions support creating durable objects? currently you have to run a separate worker to expose the DO, and there doesn't seem to be a way around that.
で、現状無い
pages devのみで、DurableObjectsをローカルで試す方法はない
たぶんプルリクはこれ?
待ってればそのうちできそうmiyamonz.icon
でも、いますぐDO触りたいよなあ?!
なので、現状は分離されたworkerを作るしか無い
ここでいうところの、pages (+ functions) + workerで素振りをする
これのおかげで、workers pages devコマンドで、外部workerのDOを参照できる
cliを直書き --doオプションで動く。なんで?
--do BINDING_NAME=ClassName@another-worker-name
code:package.json
{
...
"scripts": {
"dev": "wrangler pages dev --local --do HELLO_DURABLE=HelloDurable@name-of-anthoer-worker -- vite",
...
},
こんな感じ
offlineモードで動作確認
注意
worker側を保存し直すとか
worker側を起動し直すと繋がったりする
durable objectsへのfetchで、第2引数のrequestInitが入ってると落ちるな…
渡さなければちゃんとfetchは飛んでるのだが、websocketのswitch protocolとかをdurable objects側で担いたいので困る
公式デモのworkerではちゃんと動いてるなあ
localでも
advanced modeではできる?
未検証
_worker.jsは、ranglerが自動でpagesのルータをincludeしなくなる
自前で用意する
やってみたがようわからんくなった